<?php


namespace App\Service\Ali;

use AlibabaCloud\SDK\Captcha\V20230305\Captcha;
use \Exception;
use AlibabaCloud\Tea\Exception\TeaError;
use AlibabaCloud\Tea\Utils\Utils;

use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Captcha\V20230305\Models\VerifyCaptchaRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;

class AliCaptcha
{

    protected $error;

    // 获取错误信息
    public function getError()
    {
        return $this->error;
    }


    /**
     * 使用AK&SK初始化账号Client
     * @return Captcha Client
     */
    public static function createClient()
    {
        // 工程代码泄露可能会导致 AccessKey 泄露，并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        // 建议使用更安全的 STS 方式，更多鉴权访问方式请参见：https://help.aliyun.com/document_detail/311677.html。
        $config = new Config([
            // 必填，请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
            "accessKeyId"     => 'LTAI5tJQb5gHPwLozEVY99gH',
            // 必填，请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
            "accessKeySecret" => 'w4kMEeOTSHLJ87HyJP324so5FPQ9JA',
        ]);
        // Endpoint 请参考 https://api.aliyun.com/product/captcha
        $config->endpoint = "captcha.cn-shanghai.aliyuncs.com";

        return new Captcha($config);
    }

    /**
     * @param string
     * @return void
     */
    public static function main($param)
    {
        $client               = self::createClient();
        $verifyCaptchaRequest = new VerifyCaptchaRequest([
            "captchaVerifyParam" => $param,
        ]);
        try{
            // 复制代码运行请自行打印 API 的返回值
           $res =  $client->verifyCaptchaWithOptions($verifyCaptchaRequest, new RuntimeOptions([]));
        } catch(Exception $error){
            if(!($error instanceof TeaError)){
                $error = new TeaError([], $error->getMessage(), $error->getCode(), $error);
            }
            // 此处仅做打印展示，请谨慎对待异常处理，在工程项目中切勿直接忽略异常。
            // 错误 message
            //$this->error = $error->message;
             var_dump($error->message);
            // 诊断地址
             //var_dump($error->data["Recommend"]);

            //Utils::assertAsString($error->message);
            return false;
        }

        //var_dump($error->message);
        //var_dump($res);
        return $res;
    }

}
